import numpy as np

# #创建：
# a=np.array([1,2,3,1])#单个列表创建一元数组
# b=np.array(((1,2,3),(4,5,6,),(7,'8',9.0)))#二元数组#注意：如果期中有一项的元素与其他的不同，则无法构成二维数组
# # print(a)#[1 2 3 1]
# # print(b)
# # [['1' '2' '3']
# #  ['4' '5' '6']
# #  ['7' '8' '9.0']]其中有一个浮点，则全为浮点型，有一个字符型，全为字符型
#
# a=np.arange(0,10,2,dtype=int) #[0 2 4 6 8]创建整形数组
#
# b=np.empty((2,3),int)#[[         0          0          0]创建2X3的空整形矩阵
#                      # [1071644672          0 1072693248]]空矩阵里边的数字随机
#
# c=np.linspace(-1,2,5)#[-1.   -0.25  0.5   1.25  2.  ]把-1到2分成五份
#
# d=np.random.randint(0,3,(2,3))#[[2 1 2]生成0到3上的随机整数数组
#                              # [1 1 0]]
# #虚数单位生成数组跳过


# #数组的属性
# a=np.array(((1,2,3),(4,5,6,),(7,8,9)))

# print(a.ndim)#维数：2

# print(a.shape)#维度：(3, 3)

# print(a.size)#元素总数：9

# print(a.dtype)#元素类型：int32

# print(a.itemsize)#字节数：4

# #shape本质就是讲第一个括号里有几个元素，再讲括号里的元素有几个元素
# b=np.array([[1,2,3]])
# print(b.shape)#(1,3)
# c=np.array([[1],[2],[3]])
# print(c.shape)#(3,1)


#数组的索引
# a=np.array([2,4,8,20,16,30])
# b=np.array(((1,2,3,4,5),
#             (6,7,8,9,10),
#             (10,9,1,2,3),
#             (4,5,6,8,9.0)))#这里，靠里边的两个(可以换成[
# print(a[[2,3,-1]])# [ 8 20 30]
# print(b[1,2])# 输出第二行第三列元素:8.0
# print(b[2])#输出第三行:[10.  9.  1.  2.  3.]
# print(b[2,:])#输出第三行[10.  9.  1.  2.  3.]
# print(b[:,1])#输出第二列[2. 7. 9. 5.]
# print(b[[2,3],1:4])#输出3,4行，2,3,4列的元素1:4=[1,2,3]
# print(b[1:3,1:3])#输出2,3行2,3列的元素

# #布尔索引
# a=np.array([[1,np.nan,2],[3,np.nan,4]])
# b=a[~np.isnan(a)]# 取a中非nan的数字：[1. 2. 3. 4.] #~表示取反，~x=-x-1
# print(b[b>2])# 取大于2的数字：[3. 4.]

# a=np.array([[3,4,9],[12,15,1]])
# b=np.array([[2,6,3],[7,8,12]])
# print(a[a>b]) #a中大于b的所有元素：[ 3  9 12 15]
# print(a[a>10])#a中大于10的所有元素：[12 15]
# print(np.where(a>10,-1,a))  #a中》10的部分改为-1，剩下的不变
# print(np.where(a>10,-1,0))  #a中》10的部分改为-1，剩下的改为0

# #数组的修改
# x=np.array([[1,2],[3,4],[5,6]])
# x[2,0]=-1 #修改第三行第一列元素为-1
# y=np.delete(x,2,axis=0)#删除数组x的第三行
# z=np.delete(y,0,axis=1)#删除数组y的第一列
# t1=np.append(x,[[7,8]],axis=0)#增加一行
# t2=np.append(x,[[9],[10],[11]],axis=1)#增加一列


# #数组的变形
# #reshape和resize:a.reshape(n,s)#把a变成n行s列的数组
# a=np.arange(4)# [0 1 2 3]
# a1=a.reshape(2,2)#[[0 1] #返回的是视图，a不变
#                 # [2 3]]
#
# a2=a.resize(2,2)#None #没有返回值，改变的是a的值
# #另：reshape（-1）可以降为一维数组


# #广播机制：我的理解是，数组相加的时候，在缺失的地方，会以已知量补齐，注:广播机制只用于一行加一列，或者行列中有一个是相等的，其他的会报错！
# a=np.arange(0,20,10).reshape(-1,1) # [[ 0]
# b=np.arange(0,3)#[0 1 2]           # [10]]
# print(a+b)#[[ 0  1  2]
#          # [10 11 12]]

#文本文件的存取跳过，用pandas吧
